﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Input;


namespace Global
{
  /// <summary>
  /// Definiowanie standardowych klawiszy do gry. 
  /// </summary>
  static public class Controls
  {
    public static Keys up = Keys.Up;
    public static Keys down = Keys.Down;
    public static Keys left = Keys.Left;
    public static Keys right = Keys.Right;
    public static Keys pause = Keys.Space;
    public static Keys exit = Keys.Escape;
    //DEV KEYS:
    public static Keys skipLevel = Keys.F1;
    //public static Keys invincible = Keys.F2;

    //public static Keys toggleFullScreen = Keys.F4;

  }

  //Brakowało mi reakcji na wciśnięcie jednego klawisza. Niekoniecznie najlepiej
  //ale robi swoje. Wszelkie sugestie, poprawki mile widziane.
  public static class KeyboardExt
  {
    //keyboard keyIDs are numbered from 0 to 254
    private static bool[] keysStatus = new bool[255];

    /// <summary>
    /// Zwraca 'true' tylko przy pierwszym zauważeniu wciśnięcia klawisza.
    /// Wewnętrzna wartość trzymania klawisza jest resetowana dopiero po jego puszczeniu.
    /// </summary>
    /// <param name="keyToCheck"></param>
    /// <returns></returns>
    public static bool keyPressedOnce(Keys keyToCheck)
    {
      KeyboardState keys = Keyboard.GetState();
      bool retVal = false;
      int keyID = (int)keyToCheck;

      if (!keysStatus[keyID] && keys.IsKeyDown(keyToCheck))
      {
        keysStatus[keyID] = true;
        retVal = true;
      }

      if (keys.IsKeyUp(keyToCheck))
      {
        keysStatus[keyID] = false;
      }


      return retVal;

    }
  }
}